<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>对象</title>
</head>
<body>
    
</body>
</html>
<script>
    /*
        JS 中数据类型
            - String        字符串
            - Number        数值
            - Boolean       布尔值
            - Null          空
            - Undefined     未定义
                    以上这五种类型属于基本数据类型，以后我们看到的值
                        只要不是上面的 5种，全都是对象
            - Object        对象

        基本数据类型都是单一的值 "hello" 123 true,
            值和值之间没有任何的练习

        在 JS 中来表示一个人的值（name gender age）：
         var name = "孙悟空";
         var gender = "男";
         var age = 18;
        如果使用基本数据类型的数据，我们所创建的变量都是独立的，不能成为一个整体。

        对象属于一种复合的数据类型，在对象中可以保存多个不同的数据类型的属性

        对象的分类：
            1.内建对象
                - 由ES标准中定义的对象，在任何的ES的实现中都可以使用
                - 比如：Math String Number Boolean Function Object....
            2.宿主对象
                - 由JS 的运行环境提供的对象，目前来讲主要指由浏览器提供的对象
                - 比如 BOM DOM 
            3.自定义对象
                - 由开发人员自己创建的对象
    */

    // 创建对象
    /*
        使用 new 关键字调用函数，是构造函数 constructor
          构造函数是专门用来创建对象的函数
        使用 typeof 检查一个对象时，会返回object
    */
    var obj = new Object();
    

    /*
        在对象中保存的值称为属性
        向对象中添加属性
            语法： 对象 . 属性名 = 属性值;  ⭐ 增
    */
    // 向 obj 中添加一个 name 属性
    obj.name = "孙悟空";
    // 向 obj 中添加一个 gender 属性
    obj.gender = "男";
    // 向 obj 中添加一个 age 属性
    obj.age = 18;

    /*
        读取对象中的属性
         语法：对象. 属性名                 ⭐查

        如果读取对象中没有的属性，不会报错，而是返回undefined   
    */
    document.write(obj.name);
    console.log(obj.age);
    /*
        修改对象的属性值
         语法：对象.属性名 = 新值            ⭐改

    */
   obj.name = "汤米";
   console.log(obj.name);
    /*
        删除对象的属性
          语法：delete 对象.属性名           ⭐删

    */
    delete obj.name;
    console.log(obj.name);
</script>